#1#######
# 设置工作目录  
setwd("C:\\Users\\29228\\Desktop\\2024春学期各项汇报\\R语言与生物信息学")  

# 读取CSV文件  
data1 = read.csv("dataframe1234.csv")  
data1 = data1[,-1] 
# 先将第一列设置为行名，然后再删除它  
rownames(data1) = data1[,1]  
data1 = data1[,-1]  

# 将data1中所有数据整体log2化处理  
log2data = log2(data1 + 1)  # 假设数据中有0，添加1来避免log2(0)产生-Inf  
log2data[log2data==-Inf]=0   # 将log2data中的所有Inf和-Inf替换为数字0  

# 获取所有列名  
colnames = colnames(log2data)  
print(colnames)  

# 获取所有列名的第一第二字符  
abbcolname = substr(colnames, 1, 2)  
print(abbcolname)  

# 获取满足限定条件的列索引  
grepa = grep("ad", colnames(log2data))  
grepb = grep("ctl", colnames(log2data))  
grepc = grep("asym", colnames(log2data))  

# 创建一个数据框p来存储p值，初始化为NA  
p = data.frame(p_value = rep(NA, nrow(log2data)))  

# 循环处理每一行  
for(i in 1:nrow(log2data)) {  
  counta = 0  
  for(x in grepa) {  
    if(log2data[i,x] != 0) {  
      counta = counta + 1  
    }  
  }  
  countb = 0  
  for(y in grepb) {  
    if(log2data[i,y] != 0) {  
      countb = countb + 1  
    }  
  }  
  countc = 0  
  for(z in grepc) {  
    if(log2data[i,z] != 0) {  
      countc = countc + 1  
    }  
  }  
  
  # 如果满足条件，则进行单因素方差分析  
  if(counta >= 3 && countb >= 3 && countc >= 3) {  
    # 注意：这里不能直接使用abbcolname作为分组变量，因为abbcolname只是列名的缩写  
    # 我们需要构建一个分组变量  
    groups = factor(rep(abbcolname, each = nrow(log2data[i, grepa, drop = FALSE])))  
    data_for_test = log2data[i, c(grepa, grepb, grepc), drop = FALSE]  
    # 注意：oneway.test需要数值型数据和分组变量  
    test = oneway.test(as.numeric(as.vector(data_for_test)) ~ groups)  
    p[i, "p_value"] = test$p.value  
  }  
}  

# 打印结果  
print(p) 


#2#######

# 加载RData文件  
load("C:/Users/29228/Desktop/2024春学期各项汇报/R语言与生物信息学/volcano.RData")  
# 设置工作目录（如果需要）  
setwd("C:/Users/29228/Desktop/2024春学期各项汇报/R语言与生物信息学/")  

dir.create("my_images")   

png_file_path <- "my_images/dot_ego.png" 
# 查看当前环境中的对象  
ls()  

# 打印prostat的内容以确认其结构  
print(prostat)  

# 提取p值小于0.05的基因ID  
sig_genes <- prostat$ID[prostat$P < 0.05]  

# 安装和加载必要的包（如果它们还没有被安装和加载）  

library(org.Hs.eg.db)  
library(clusterProfiler)  

# 进行GO富集分析  
ego_res <- enrichGO(gene = sig_genes, OrgDb = "org.Hs.eg.db", keyType = "SYMBOL", ont = "all", qvalueCutoff = 0.05, readable = TRUE)  



# 生成并保存dotplot图像  
dotplot(ego_res, showCategory = 10) # 显示前10个最显著的类别  
png(file=png_file_path, width = 1000, height = 1000)  
dev.off() 


